其他
ollvm算法还原案例分享
看雪3W班12月ollvm题,重点考察去混淆。
1
解题思路
得益于Unicorn的强大的指令trace能力,可以很容易实现对cpu执行的每一条汇编指令的跟踪,进而对ollvm保护的函数进行剪枝,去掉虚假块,大大提高逆向分析效率。
通过对题目的考察,学习到如下知识点:
2
详细步骤
1、apk拖入jadx,获取基础信息。
com.kanxue.crackme
com.kanxue.crackme.MainActivity
public boolean check(String content) {
if (jnicheck(content)) {
return true;
}
return false;
}
System.loadLibrary("native-lib");
public native boolean jnicheck(String str);
public static native boolean crypt2(String str);
2、利用frida去hook关键函数,同时输入字符,点按钮验证,观察日志后发现:jnicheck是我们的输入、crypt2是输入字符串+字符串666。
3、IDA分析so,直接跟踪到关键函数sub_22390、sub_19a60;发现都是ollvm混淆的,没法看。
4、用unidbg跑关键的crypt2函数,并拿到trace日志,其中重要的是地址。
5、根据题目提示信息——利用trace日志进行剪枝,查了下IDAPython API,编写剪枝代码,对2个函数剪枝。发现关键函数sub_19a60就是base64、sub_22390就是很简单的调用。
看雪ID:奔跑的阿狸
https://bbs.pediy.com/user-home-717171.htm
# 往期推荐
球分享
球点赞
球在看
点击“阅读原文”,了解更多!